{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "random库是使用随机数的Python标准库\n",
    "\n",
    "从概率论角度来说，随机数是随机产生的数据（比如抛硬币），但时计算机是不可能产生随机值，真正的随机数也是在特定条件下产生的确定值，只不过这些条件我们没有理解，或者超出了我们的理解范围。计算机不能产生真正的随机数，那么伪随机数也就被称为随机数\n",
    "\n",
    "\\--伪随机数：计算机中通过采用梅森旋转算法生成的（伪）随机序列元素\n",
    "\n",
    "python中用于生成伪随机数的函数库是random\n",
    "\n",
    "因为是标准库，使用时候只需要import random\n",
    "\n",
    "random库包含两类函数，常用的共8个\n",
    "\n",
    "        --基本随机函数： seed(), random()\n",
    "\n",
    "        --扩展随机函数：randint(), getrandbits(), uniform(), randrange(), choice(), shuffle()\n",
    "\n",
    "##  **基本随机数**\n",
    "\n",
    "Python中产生随机数使用**随机数种子**来产生      （只要种子相同，产生的随机序列，无论是每一个数，还是数与数之间的关系都是确定的，所以随机数种子确定了随机序列的产生）\n",
    "\n",
    "随机数种子       梅森旋转算法    随机序列\n",
    "\n",
    "10                                                0.5714025946899135\n",
    "\n",
    "随机序列中的每一个数就是随机数\n",
    "\n",
    "<table><caption><em><strong><span>基本随机函数&nbsp;</span></strong></em></caption><tbody><tr><td><span>函数</span></td><td><p><span>描述</span></p></td></tr><tr><td>&nbsp;&nbsp;seed(a=None)</td><td>&nbsp;<p>&nbsp;初始化给定的随机数种子，默认为当前系统时间</p><p>&gt;&gt;&gt;random.seed(10)&nbsp; &nbsp; &nbsp;#产生种子10对应的序列</p></td></tr><tr><td>&nbsp;random()</td><td><p>&nbsp;生成一个[0.0,1.0)之间的随机小数</p><p>&gt;&gt;&gt;random.random()</p><p>0.5714025946899135&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #随机数产生与种子有关，如果种子是1哦，第一个数必定是这个</p></td></tr></tbody></table>\n",
    "\n",
    "使用随机数种子的好处是可以复现有随机数的程序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.1456692551041303,0.1456692551041303,0.1456692551041303,0.1456692551041303,0.1456692551041303,0.1456692551041303,0.1456692551041303,0.1456692551041303,0.1456692551041303,0.1456692551041303,"
     ]
    }
   ],
   "source": [
    "\"\"\"为什么说计算机生成的是伪随机数\n",
    "主要是因为计算机生成的随机数是根据seed（种子）生成的，多个随机值如果seed相同，那么他们值也就相同\n",
    "\"\"\"\n",
    "import random\n",
    "\n",
    "for i in range(10):\n",
    "    random.seed(100)\n",
    "    print(random.random(), end=\",\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "\n",
    "## 扩展随机数函数\n",
    "\n",
    "在random库中，最基本的是seed 和random 函数，但时功能比较单一，为此产生了6个扩展随机数函数\n",
    "\n",
    "<table><caption><em><strong><span>扩展随机数函数</span></strong></em></caption><tbody><tr><td><span><strong>函数</strong></span></td><td><span><strong>描述</strong></span></td></tr><tr><td>&nbsp;randint(a,b)</td><td><p>&nbsp;生成一个[a,b]之间的整数</p><p>&gt;&gt;&gt;random.randint(10,100)</p></td></tr><tr><td>&nbsp;randrange(m,n[,k])</td><td><p>&nbsp;生成一个[m,n)之间以k为步长的随机整数</p><p>&gt;&gt;&gt;random.randrange(10,100,10)</p></td></tr><tr><td>&nbsp;getrandbits(k)</td><td><p>&nbsp;生成一个k比特长的随机整数</p><p>&gt;&gt;&gt;random.getrandbits(16)</p><p>37885</p></td></tr><tr><td>&nbsp;uniform(a,b)</td><td><p>&nbsp;生成一个[a,b]之间的随机小数</p><p>&gt;&gt;&gt;random.uniform(10,100)</p><p>16.848041210321334</p></td></tr><tr><td><p>&nbsp;choice(seq)&nbsp; &nbsp;</p><p>序列相关</p></td><td><p>&nbsp;从序列中随机选择一个元素</p><p>&gt;&gt;&gt;random.choice([1, 2, 3, 4, 5, 6, 7, 8, 9])</p><p>8</p></td></tr><tr><td><p>&nbsp;shuffle(seq)</p><p>序列相关</p></td><td><p>&nbsp;将序列seq中元素随机排列,返回打乱后的序列</p><p>&gt;&gt;&gt;s=[1, 2, 3, 4, 5, 6, 7, 8, 9]; random.shuffle(s); print(s)</p><p>[9, 4, 6, 3, 5, 2, 8, 7, 1]</p></td></tr></tbody></table>\n",
    "\n",
    "随机数函数的使用要点：\n",
    "\n",
    "\\--能够利用随机数种子产生“确定”伪随机数   seed生成种子，random函数产生随机数\n",
    "\n",
    "\\--能够产生随机整数\n",
    "\n",
    "\\--能对序列类型进行随机操作"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}